//
//  MSAudioConversion.h
//  AVPlayer
//
//  Created by Michael Ge on 2019/1/2.
//  Copyright © 2019 Michael. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>

FOUNDATION_EXPORT NSErrorDomain const MSAudioConversionErrorDomain;
NS_ERROR_ENUM(MSAudioConversionErrorDomain)
{
    MSACErrorUnknown = 1000,
    MSACErrorFileIsDirectory = 1002,
    MSACErrorConverting = 1003
};


NS_ASSUME_NONNULL_BEGIN
@class MSAudioConversion;
@protocol MSAudioConversionDelegate <NSObject>

@optional
/**
 当开始转换音频文件时调用此事件
 @param conversion MSAudioConversion 实例
 */
-(void)audioConversionStarted:(MSAudioConversion*)conversion;

/**
 当一个音频转换操作被取消时，调用此方法。
 @param conversion MSAudioConversion 实例
 */
-(void)audioConversionCancelled:(MSAudioConversion*)conversion;

/**
 当音频文件转换完成时（不包括被取消的转换）调用此事件
 @param conversion MSAudioConversion 实例
 */
-(void)audioConversionFinised:(MSAudioConversion*)conversion;

@end

@interface MSAudioConversion : NSObject
@property(weak,nonatomic,nullable) id<MSAudioConversionDelegate> delegate;
@property(assign,nonatomic,readonly)AVFileType outputFileType;
@property(copy,nonatomic,readonly,nonnull) NSString* outputFilePath;
@property(copy,nonatomic,readonly,nonnull) NSURL* sourceUrl;

//是否正在转换中
@property(assign,nonatomic,readonly) BOOL isConverting;
@property(strong,nonatomic,readonly,nullable) NSError *error;

/**
 创建一个 WAV 文件转换器，将音频文件转换为 WAV 文件。

 @param url 音频源文件
 @param path 输出文件全路径（.wav 文件）
 @param outError 如果创建失败，将会设置错误信息
 @return MSAudioConversion
 */
+(MSAudioConversion*)conversionForWav:(NSURL* _Nonnull)url output:(NSString* _Nonnull)path error:(NSError * _Nullable * _Nullable)outError;

/**
 启动转换
 @return 是否启动成功，如果启动失败请检查 error 属性区取详细的错误信息。
 */
-(BOOL)start;

/**
 取消息正在进行的转换操作
 如果当前没有进行转换操作则返回 NO，且不进行任何操作。
 如果当前正在转换中则返回 YES，并且触发 audioConversionCancelled 事件。
 */
-(BOOL)cancel;
@end

NS_ASSUME_NONNULL_END
